package com.ruoyi.hiscomm.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.hiscomm.domain.DeptDictDo;
import com.ruoyi.hiscomm.domain.DrugBasicInfoDo;
import com.ruoyi.hiscomm.request.DeptParm;
import com.ruoyi.hiscomm.request.DrugParm;

import java.io.IOException;
import java.util.List;

/**
 * @ClassName DrugBasicInfoService
 * @Author samula
 * @Descripe product by com.doctcloud
 * @Data 2025-09-28 4:58
 **/
public interface IDrugBasicInfoService {
    /**
     * 分页模糊查询科室（基于 Elasticsearch）
     * @param drug 分页查询参数（需设置 deptName、currentPage、pageSize）
     * @return 分页结果（包含当前页数据）
     */
    IPage<DrugBasicInfoDo> pageESDrugList(DrugParm drug);
    /**
     * 分页精准查询科室(基于Redis)
     * @param drug
     * @return 分页查询参数（需设置 deptName、currentPage、pageSize）
     */
    IPage<DrugBasicInfoDo> pageRedisDeptList(DrugParm drug);
    /**
     * 添加科室字典数据（同步到数据库和 Elasticsearch）
     * @param drug 药品数据对象
     * @return 影响的数据库记录数
     * @throws IOException 数据同步异常
     */
    int insertDrugBasicInfo(DrugBasicInfoDo drug) throws IOException;
    /**
     * 更新科室字典数据（同步到数据库和 Elasticsearch）
     * @param DrugBasicInfoDo 药品数据对象
     * @return 影响的数据库记录数
     * @throws IOException 数据同步异常
     */
    int updateDrugBasicInfo(DrugBasicInfoDo drug) throws IOException;
    /**
     * 删除科室(基本上不允许)，可能需要大量校验方能删除，当前设想，
     * 需要增加一张表，该表用于记录所有字典关键字是否有在业务过程中使用过的记录
     * @param drug 主要取drug_std_code
     * @return
     * @throws IOException
     */
    int deleteDrugBasicInfo(DrugBasicInfoDo drug);
    DrugBasicInfoDo getOneDrugBasicInfo(DrugBasicInfoDo drug);
    /**
     * 查询所有科室数据（从数据库）
     * @return 科室列表
     */
    List<DrugBasicInfoDo> listDrugBasicInfos();

    boolean checkDrugUnique(DrugBasicInfoDo drug);
    String checkInputDrugInfoValid(DrugBasicInfoDo drug);
}
